package config

import (
	"github.com/spf13/viper"
	"log"
)

// Config 应用配置结构体
type Config struct {
	App struct {
		Name string // 应用名称
		Port string // 应用端口
	}
	Database struct {
		Dsn          string // 写库（主库）连接字符串
		DsnSlave     string // 读库（从库）连接字符串
		MaxIdleConns int    // 最大空闲连接数
		MaxOpenConns int    // 最大打开连接数
	}
}

// AppConfig 全局配置实例
var AppConfig *Config

// InitConfig 初始化配置
// 功能：加载配置文件并初始化应用组件
func InitConfig() {
	// 设置配置文件名（不需要扩展名）
	viper.SetConfigName("config")
	// 设置配置文件类型
	viper.SetConfigType("yaml")
	// 添加配置文件搜索路径
	viper.AddConfigPath("./config")

	//viper.SetEnvPrefix("APP") // 设置环境变量前缀
	//viper.AutomaticEnv()      //自动绑定环境变量

	// 读取配置文件
	if err := viper.ReadInConfig(); err != nil {
		log.Fatalf("读取配置文件错误: %v", err)
	}

	// 将配置解析到结构体
	AppConfig = &Config{}
	if err := viper.Unmarshal(AppConfig); err != nil {
		log.Fatalf("解析配置失败: %v", err)
	}

	// 初始化数据库连接
	initDB()

	// 初始化Redis连接
	initRedis()
}
